home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1996 May: Tool Chest / Developer CD Series May 1996 (Tool Chest) (Apple Computer) (1996).iso / Tool Chest / Text / WASTE / WASTE 1.1.2 Distribution / Pseudo-UPI for THINK Pascal / OSUtils.p < prev    next >
Encoding:
Text File  |  1995-10-12  |  8.3 KB  |  371 lines  |  [TEXT/PJMM]

  1. unit OSUtils;
  2.  
  3. { Pascal Interface to the Macintosh Libraries }
  4.  
  5. { Copyright © Apple Computer Inc. }
  6. { All Rights Reserved }
  7.  
  8. { Adapted for use with THINK Pascal 4.0.x by Marco Piovanelli }
  9.  
  10. interface
  11.     uses
  12.         Types;
  13.  
  14.     const
  15.         useFree = 0;
  16.         useATalk = 1;
  17.         useAsync = 2;
  18.         useExtClk = 3;                            {Externally clocked}
  19.         useMIDI = 4;
  20. { Environs Equates }
  21.         curSysEnvVers = 2;                            {Updated to equal latest SysEnvirons version}
  22. { Machine Types }
  23.         envMac = -1;
  24.         envXL = -2;
  25.         envMachUnknown = 0;
  26.         env512KE = 1;
  27.         envMacPlus = 2;
  28.         envSE = 3;
  29.         envMacII = 4;
  30.         envMacIIx = 5;
  31.         envMacIIcx = 6;
  32.         envSE30 = 7;
  33.         envPortable = 8;
  34.         envMacIIci = 9;
  35.         envMacIIfx = 11;
  36. { CPU types }
  37.         envCPUUnknown = 0;
  38.  
  39.         env68000 = 1;
  40.         env68010 = 2;
  41.         env68020 = 3;
  42.         env68030 = 4;
  43.         env68040 = 5;
  44. { Keyboard types }
  45.         envUnknownKbd = 0;
  46.         envMacKbd = 1;
  47.         envMacAndPad = 2;
  48.         envMacPlusKbd = 3;
  49.         envAExtendKbd = 4;
  50.         envStandADBKbd = 5;
  51.         envPrtblADBKbd = 6;
  52.         envPrtblISOKbd = 7;
  53.         envStdISOADBKbd = 8;
  54.         envExtISOADBKbd = 9;
  55.         false32b = 0;                            {24 bit addressing error}
  56.         true32b = 1;                            {32 bit addressing error}
  57. { result types for RelString Call }
  58.         sortsBefore = -1;                            {first string < second string}
  59.         sortsEqual = 0;                            {first string = second string}
  60.         sortsAfter = 1;                            {first string > second string}
  61.  
  62. { Toggle results }
  63.         toggleUndefined = 0;
  64.         toggleOK = 1;
  65.         toggleBadField = 2;
  66.         toggleBadDelta = 3;
  67.         toggleBadChar = 4;
  68.         toggleUnknown = 5;
  69.         toggleBadNum = 6;
  70.         toggleOutOfRange = 7;                            {synonym for toggleErr3}
  71.         toggleErr3 = 7;
  72.         toggleErr4 = 8;
  73.         toggleErr5 = 9;
  74. { Date equates }
  75.         smallDateBit = 31;                            {Restrict valid date/time to range of Time global}
  76.         togChar12HourBit = 30;                            {If toggling hour by char, accept hours 1..12 only}
  77.         togCharZCycleBit = 29;                            {Modifier for togChar12HourBit: accept hours 0..11 only}
  78.         togDelta12HourBit = 28;                            {If toggling hour up/down, restrict to 12-hour range (am/pm)}
  79.         genCdevRangeBit = 27;                            {Restrict date/time to range used by genl CDEV}
  80.         validDateFields = -1;
  81.         maxDateField = 10;
  82.         eraMask = $0001;
  83.         yearMask = $0002;
  84.         monthMask = $0004;
  85.         dayMask = $0008;
  86.         hourMask = $0010;
  87.         minuteMask = $0020;
  88.         secondMask = $0040;
  89.         dayOfWeekMask = $0080;
  90.         dayOfYearMask = $0100;
  91.         weekOfYearMask = $0200;
  92.         pmMask = $0400;
  93.         dateStdMask = $007F;                        {default for ValidDate flags and ToggleDate TogglePB.togFlags}
  94.  
  95.         eraField = 0;
  96.         yearField = 1;
  97.         monthField = 2;
  98.         dayField = 3;
  99.         hourField = 4;
  100.         minuteField = 5;
  101.         secondField = 6;
  102.         dayOfWeekField = 7;
  103.         dayOfYearField = 8;
  104.         weekOfYearField = 9;
  105.         pmField = 10;
  106.         res1Field = 11;
  107.         res2Field = 12;
  108.         res3Field = 13;
  109.  
  110.  
  111.     type
  112.         LongDateField = SignedByte;
  113.  
  114.  
  115.     const
  116.         dummyType = 0;
  117.         vType = 1;
  118.         ioQType = 2;
  119.         drvQType = 3;
  120.         evType = 4;
  121.         fsQType = 5;
  122.         sIQType = 6;
  123.         dtQType = 7;
  124.         nmType = 8;
  125.  
  126.  
  127.     type
  128.         QTypes = SignedByte;
  129.  
  130.  
  131.     const
  132.         OSTrap = 0;
  133.         ToolTrap = 1;
  134.  
  135.  
  136.     type
  137.         TrapType = SignedByte;
  138.  
  139.         SysParmType = packed record
  140.                 valid: UInt8;
  141.                 aTalkA: UInt8;
  142.                 aTalkB: UInt8;
  143.                 config: UInt8;
  144.                 portA: INTEGER;
  145.                 portB: INTEGER;
  146.                 alarm: LONGINT;
  147.                 font: INTEGER;
  148.                 kbdPrint: INTEGER;
  149.                 volClik: INTEGER;
  150.                 misc: INTEGER;
  151.             end;
  152.         SysPPtr = ^SysParmType;
  153.  
  154.         QElemPtr = ^QElem;
  155.  
  156.         QElem = record
  157.                 qLink: QElemPtr;
  158.                 qType: INTEGER;
  159.                 qData: array[0..0] of INTEGER;
  160.             end;
  161.         QHdrPtr = ^QHdr;
  162.  
  163.         QHdr = record
  164.                 qFlags: INTEGER;
  165.                 qHead: QElemPtr;
  166.                 qTail: QElemPtr;
  167.             end;
  168.  
  169. {        DeferredTaskProcPtr uses register based parameters on the 68k and cannot}
  170. {        be written in or called from a high-level language without the help of}
  171. {        mixed mode or assembly glue.}
  172.  
  173. {        In:}
  174. {         => dtParam         A1.L}
  175.  
  176.         DeferredTaskProcPtr = ProcPtr;  { PROCEDURE DeferredTask(dtParam: LONGINT); }
  177.         DeferredTaskUPP = UniversalProcPtr;
  178.  
  179.         DeferredTask = record
  180.                 qLink: QElemPtr;
  181.                 qType: INTEGER;
  182.                 dtFlags: INTEGER;
  183.                 dtAddr: DeferredTaskUPP;
  184.                 dtParam: LONGINT;
  185.                 dtReserved: LONGINT;
  186.             end;
  187.         DeferredTaskPtr = ^DeferredTask;
  188.  
  189.         SysEnvRec = record
  190.                 environsVersion: INTEGER;
  191.                 machineType: INTEGER;
  192.                 systemVersion: INTEGER;
  193.                 processor: INTEGER;
  194.                 hasFPU: BOOLEAN;
  195.                 hasColorQD: BOOLEAN;
  196.                 keyBoardType: INTEGER;
  197.                 atDrvrVersNum: INTEGER;
  198.                 sysVRefNum: INTEGER;
  199.             end;
  200.         MachineLocation = record
  201.                 latitude: Fract;
  202.                 longitude: Fract;
  203.                 case INTEGER of
  204.                     0: (
  205.                             dlsDelta: SInt8;                                {signed byte; daylight savings delta}
  206.                     );
  207.                     1: (
  208.                             gmtDelta: LONGINT;                            {must mask - see documentation}
  209.                     );
  210.             end;
  211.         DateTimeRec = record
  212.                 year: INTEGER;
  213.                 month: INTEGER;
  214.                 day: INTEGER;
  215.                 hour: INTEGER;
  216.                 minute: INTEGER;
  217.                 second: INTEGER;
  218.                 dayOfWeek: INTEGER;
  219.             end;
  220.         LongDateTime = wide;
  221.  
  222.         LongDateCvt = record
  223.                 case INTEGER of
  224.                     0: (
  225.                             c: wide;
  226.                     );
  227.                     1: (
  228.                             lHigh: UInt32;
  229.                             lLow: UInt32;
  230.                     );
  231.             end;
  232.         LongDateRec = record
  233.                 case INTEGER of
  234.                     0: (
  235.                             era: INTEGER;
  236.                             year: INTEGER;
  237.                             month: INTEGER;
  238.                             day: INTEGER;
  239.                             hour: INTEGER;
  240.                             minute: INTEGER;
  241.                             second: INTEGER;
  242.                             dayOfWeek: INTEGER;
  243.                             dayOfYear: INTEGER;
  244.                             weekOfYear: INTEGER;
  245.                             pm: INTEGER;
  246.                             res1: INTEGER;
  247.                             res2: INTEGER;
  248.                             res3: INTEGER;
  249.                     );
  250.                     1: (
  251.                             list: array[0..13] of INTEGER;            {Index by LongDateField!}
  252.                     );
  253.                     2: (
  254.                             eraAlt: INTEGER;
  255.                             oldDate: DateTimeRec;
  256.                     );
  257.             end;
  258.         DateDelta = SInt8;
  259.  
  260.         TogglePB = record
  261.                 togFlags: LONGINT;                                {caller normally sets low word to dateStdMask=$7F}
  262.                 amChars: ResType;                                {from 'itl0', but uppercased}
  263.                 pmChars: ResType;                                {from 'itl0', but uppercased}
  264.                 reserved: array[0..3] of LONGINT;
  265.             end;
  266.         ToggleResults = INTEGER;
  267.  
  268.     const
  269.         uppDeferredTaskProcInfo = $0000B802; { Register PROCEDURE (4 bytes in A1); }
  270.  
  271.     function NewDeferredTaskProc (userRoutine: DeferredTaskProcPtr): DeferredTaskUPP;
  272.     inline
  273.         $2E9F;
  274.  
  275.     procedure CallDeferredTaskProc (dtParam: LONGINT;
  276.                                     userRoutine: DeferredTaskUPP);
  277.     {To be implemented:  Glue to move parameters into registers.}
  278.  
  279.     procedure LongDateToSeconds ({CONST}
  280.                                     var lDate: LongDateRec;
  281.                                     var lSecs: LongDateTime);
  282.     inline
  283.         $2F3C, $8008, $FFF2, $A8B5;
  284.     procedure LongSecondsToDate (var lSecs: LongDateTime;
  285.                                     var lDate: LongDateRec);
  286.     inline
  287.         $2F3C, $8008, $FFF0, $A8B5;
  288.     function ToggleDate (var lSecs: LongDateTime;
  289.                                     field: ByteParameter;
  290.                                     delta: ByteParameter;
  291.                                     ch: INTEGER; {CONST}
  292.                                     var params: TogglePB): ToggleResults;
  293.     inline
  294.         $2F3C, $820E, $FFEE, $A8B5;
  295.     function ValidDate ({CONST}
  296.                                     var vDate: LongDateRec;
  297.                                     flags: LONGINT;
  298.                                     var newSecs: LongDateTime): INTEGER;
  299.     inline
  300.         $2F3C, $820C, $FFE4, $A8B5;
  301.     function IsMetric: BOOLEAN;
  302.     inline
  303.         $3F3C, $0004, $A9ED;
  304.     function GetSysPPtr: SysPPtr;
  305.     inline
  306.         $2EBC, $0000, $01F8;
  307.     function ReadDateTime (var time: LONGINT): OSErr;
  308.     inline
  309.         $205F, $A039, $3E80;
  310.     procedure GetDateTime (var secs: LONGINT);
  311.     inline
  312.         $205F, $20B8, $020C;
  313.     function SetDateTime (time: LONGINT): OSErr;
  314.     inline
  315.         $201F, $A03A, $3E80;
  316.     procedure SetTime ({CONST}
  317.                                     var d: DateTimeRec);
  318.     inline
  319.         $205F, $A9C7, $A03A;
  320.     procedure GetTime (var d: DateTimeRec);
  321.     inline
  322.         $205F, $2038, $020C, $A9C6;
  323.     procedure DateToSeconds ({CONST}
  324.                                     var d: DateTimeRec;
  325.                                     var secs: LONGINT);
  326.     procedure SecondsToDate (secs: LONGINT;
  327.                                     var d: DateTimeRec);
  328.     inline
  329.         $205F, $201F, $A9C6;
  330.     function DTInstall (dtTaskPtr: DeferredTaskPtr): OSErr;
  331.     inline
  332.         $205F, $A082, $3E80;
  333.  
  334.     function GetOSTrapAddress (trapNum: INTEGER): UniversalProcPtr;
  335.     inline
  336.         $301F, $A346, $2E88;
  337.     procedure SetOSTrapAddress (trapAddr: UniversalProcPtr;
  338.                                     trapNum: INTEGER);
  339.     inline
  340.         $301F, $205F, $A247;
  341.     function GetToolTrapAddress (trapNum: INTEGER): UniversalProcPtr;
  342.     inline
  343.         $301F, $A746, $2E88;
  344.     procedure SetToolTrapAddress (trapAddr: UniversalProcPtr;
  345.                                     trapNum: INTEGER);
  346.     inline
  347.         $301F, $205F, $A647;
  348.     function GetToolboxTrapAddress (trapNum: INTEGER): UniversalProcPtr;
  349.     inline
  350.         $301F, $A746, $2E88;
  351.     procedure SetToolboxTrapAddress (trapAddr: UniversalProcPtr;
  352.                                     trapNum: INTEGER);
  353.     inline
  354.         $301F, $205F, $A647;
  355.  
  356.     procedure FlushCodeCacheRange (address: univ Ptr;
  357.                                     count: LONGINT);
  358.     inline
  359.         $225F, $205F, $7009, $A098;
  360.  
  361.     procedure ReadLocation (var loc: MachineLocation);
  362.     inline
  363.         $205F, $203C, $000C, $00E4, $A051;
  364.  
  365.     procedure WriteLocation ({CONST}
  366.                                     var loc: MachineLocation);
  367.     inline
  368.         $205F, $203C, $000C, $00E4, $A052;
  369.  
  370. implementation
  371. end.